/**
 * @file 	 mbSlave_demo.h
 * @brief       
 * @author 	 wenbo
 * @version  1.0
 * @date 	 2023-03-22
 * 
 * @copyright Copyright (c) 2023  YGL
 * 
 */
#ifndef __MBSLAVE_DEMO_H_
#define __MBSLAVE_DEMO_H_

#include "bsp.h"

#pragma anon_unions

/**
 * @brief       保持寄存器功能映射
 */
typedef struct {
	float totalWater;				// 用水量
	float totalElectricity;			// 用电量
	uint32_t totalOrders;			// 总订单
	uint16_t pressure;				// 触压值
	uint16_t currFault;				// 当前异常
} hold_reg_map_t;

/**
 * @brief       线圈寄存器功能映射
 */
typedef struct {
	struct {
		uint8_t fast : 1;		// 快速洗
		uint8_t normal : 1;		// 标准洗
		uint8_t clean : 1;		// 精致洗
		uint8_t resv : 5;		// 占位
	} washMode;

	struct {
		uint8_t start : 1;		// 启动
		uint8_t stop : 1;		// 停止
		uint8_t reset : 1;		// 复位
		uint8_t resv : 5;		// 占位
	} washCmd;

	struct {
		uint32_t gantry_FW : 1;			// 龙门前进
		uint32_t gantry_BK : 1;			// 龙门后退
		uint32_t brush_TOP_CW : 1;		// 顶刷正转
		uint32_t brush_TOP_UP : 1;		// 顶刷上移
		uint32_t brush_TOP_DW : 1;		// 顶刷下移
		uint32_t brush_LEFT_CW : 1;		// 左刷正转
		uint32_t brush_LEFT_CCW : 1;	// 左刷反转
		uint32_t brush_LEFT_L : 1;		// 左刷左移
		uint32_t brush_LEFT_R : 1;		// 左刷右移
		uint32_t brush_WHEEL_CW : 1;	// 轮刷正转
		uint32_t brush_RIGHT_CW : 1;	// 右刷正转
		uint32_t brush_RIGHT_CCW : 1;	// 右刷反转
		uint32_t brush_RIGHT_R : 1;		// 右刷右移
		uint32_t brush_RIGHT_L : 1;		// 右刷左移
		uint32_t brush_WHEEL_CCW : 1;	// 轮刷反转
		uint32_t fan_MIDDLE : 1;		// 中间风机
		uint32_t fan_SIDE : 1;			// 两侧风机
		uint32_t brush_WHEEL_OUT : 1;	// 轮刷伸缩
		uint32_t resv : 15;				// 占位
	} washCtrl;

	struct {
		uint32_t stopOperating : 1;		// 停止营业
		uint32_t WaterPressCHeck : 1;	// 水压检测
		uint32_t smashProtection : 1;	// 防砸保护
		uint32_t brushWheelShield : 1;	// 轮刷屏蔽
		uint32_t winterDrainage : 1;	// 冬季排水
		uint32_t resv : 9;				// 占位
	} washParam;

	struct {
		uint32_t brush_TOP_CW_OV : 1;	// 顶刷旋转过载
		uint32_t brush_TOP_UP_OV : 1;	// 顶刷上下过载
		uint32_t brush_LEFT_CW_OV : 1;	// 左刷旋转过载
		uint32_t brush_RIGHT_CW_OV : 1;	// 右刷旋转过载
		uint32_t brush_WHEEL_CW_OV : 1;	// 轮刷转过载
		uint32_t brush_LEFT_MV_OV : 1;	// 左刷开合过载
		uint32_t fan_MIDDLE_OV : 1;		// 中间风机过载
		uint32_t fan_SIDE_OV : 1;		// 两侧风机过载
		uint32_t water_pump_OV : 1;		// 清水泵过载
		uint32_t moveFault : 1;			// 行走异常
		uint32_t vfdFault : 1;			// 变频器异常
		uint32_t washStopping : 1;		// 洗车机停止中
		uint32_t washHoming : 1;		// 洗车机归位中
		uint32_t washComplited : 1;		// 洗车机完成
		uint32_t washFaulting : 1;		// 洗车机异常中
		uint32_t washForward : 1;		// 前进冲洗
		uint32_t washTail : 1;			// 刷洗车尾
		uint32_t washDepth : 1;			// 深度清洁中
		uint32_t washHead : 1;			// 刷洗车头
		uint32_t washNormaling : 1;		// 标准清洗中
		uint32_t washForwardSpray : 1;	// 前进喷淋中
		uint32_t washBackSpray : 1;		// 后退喷淋中
		uint32_t washForwardWaxing : 1;	// 前进打蜡中
		uint32_t washBackWaxing : 1;	// 后退打蜡中
		uint32_t washForwardFan : 1;	// 前进风干中
		uint32_t washBackFan : 1;		// 后退风干中
	} washFault;
} coils_reg_map_t;

/**
 * @brief       日单量结构
 */
typedef struct {
	uint16_t washFastOrders;				// 快速洗单量
	uint16_t washNormalOrders;				// 标准洗单量
	uint16_t washCleanOrders;				// 精致洗单量
	uint16_t todayOrders;					// 今日总单量
} orders_day_t;

/**
 * @brief       月单量结构
 */
typedef struct {
	uint16_t monthOrders_curr;				// (选中月份)当月单量(月统计界面)
	uint16_t washFastOrders_curr;			// (选中月份)当月快速洗单量
	uint16_t washNormalOrders_curr;			// (选中月份)当月标准洗单量
	uint16_t washCleanOrders_curr;			// (选中月份)当月精致洗单量
	orders_day_t dayOrders[31];				// (选中月份)日单量
} orders_month_t;

/**
 * @brief       输入寄存器功能映射
 */
typedef struct {
	orders_day_t today;						// 当日单量
	uint16_t monthTotalOrders[12];			// 月总单量
	uint16_t resv[4];						// 占位,预留后续新增
	orders_month_t monthOrders[12];			// (选中月份)月单量详细
} input_reg_map_t;



void mbSlave_demo_init(void);

#endif

